Javítani szeretné ezt a bejegyzést? Adjon részletes válaszokat erre a kérdésre, ideértve az idézeteket és annak magyarázatát, hogy miért felel meg helyesen. A kellő részletességgel nem rendelkező válaszok szerkeszthetők vagy törölhetők. Mi a különbség a git pull és a git fetch között?
2020-12-07 13:15:54
1 2 Következő A legegyszerűbben kifejezve: a git pull egy git beolvasást követ, amelyet egy git egyesítés követ. Bármikor elvégezhet egy git-lekérést a távkövető ágak frissítéséhez a refs / remotes // alatt. Ez a művelet soha nem változtatja meg a saját helyi fiókjait a referenciák / fejek alatt, és biztonságosan elvégezhető a munkamásolat megváltoztatása nélkül. Még hallottam olyanokról, akik rendszeresen futtatják a git-lekérést a háttérben végzett munkában (bár ezt nem javasolnám). A git húzás az, amit tenne, ha a helyi fiókot naprakészen látná a távoli verziójával, és frissítené a többi távkövető ágat is. A git pull Git dokumentációjából: Alapértelmezett módjában a git pull rövidítés a git lekéréshez, majd a git egyesítés FETCH_HEAD. | A pull használatakor Git megpróbálja automatikusan elvégezni a munkáját helyetted. Környezetérzékeny, ezért a Git beolvasztja az összes húzott elkötelezettséget abba az ágba, amelyben éppen dolgozik. A pull automatikusan összevonja az elkötelezettségeket anélkül, hogy lehetővé tenné azok áttekintését. Ha nem kezeli szorosan fiókjait, gyakran konfliktusokba ütközhet. Amikor lekéred, a Git összegyűjti a célágból az összes olyan elkötelezettséget, amely nem létezik az aktuális fiókban, és tárolja azokat a helyi adattárban. Ez azonban nem egyesíti őket a jelenlegi fiókkal. Ez különösen akkor hasznos, ha naprakészen kell tárolnia az adattárat, de azon dolgozunk, amely meghibásodhat, ha frissíti a fájlokat. Az összevonások integrálásához a fő ágba az egyesítést használja. | Fontos, hogy szembeállítsuk a git tervezési filozófiáját egy olyan hagyományosabb forrásellenőrző eszköz filozófiájával, mint az SVN. A Subversion-t kliens / szerver modellel tervezték és építették. Egyetlen lerakat található, amely a kiszolgáló, és több kliens lekérheti a kódot a szerverről, dolgozhat rajta, majd visszaválaszthatja azt a szervernek. Az a feltételezés, hogy az ügyfél mindig kapcsolatba léphet a szerverrel, amikor műveletet kell végrehajtania. A Git egy elosztottabb modell támogatására készült, és nincs szükség központi adattárra (bár mindenképpen használhat ilyet, ha úgy tetszik). A git szintén úgy lett megtervezve, hogy az ügyfélnek és a "szervernek" ne kelljen egyszerre online lennie. A Git-et úgy tervezték, hogy a megbízhatatlan linken lévő emberek akár e-mailben is kicserélhessék a kódot. Lehetőség van teljesen leválasztva dolgozni, és CD-t égetni a giten keresztül történő kódcserére. Ennek a modellnek a támogatása érdekében a git fenntart egy helyi adattárat a kóddal, valamint egy további helyi adattárat, amely tükrözi a távoli adattár állapotát. A távoli adattár egy példányának helyben tartásával a git kitalálja a szükséges változtatásokat akkor is, ha a távoli adattár nem érhető el. Később, amikor el kell küldenie a módosításokat másnak, a git változások halmazaként továbbíthatja azokat a távoli adattár számára ismert időpontból. A git fetch az a parancs, amely azt mondja: "frissítse a távoli adattár helyi másolatát." A git pull azt mondja: "vigye a távoli adattár változásait oda, ahol a saját kódomat tárolom." Általában a git pull ezt egy git-lekéréssel végzi, hogy a távoli adattár helyi másolatát naprakész állapotba hozza, majd egyesíti a változtatásokat saját kódtárába és esetleg munkamásolatába. Az elvitelre azt kell szem előtt tartani, hogy a munkaállomáson gyakran van legalább egy projekt másolata. Az egyik példány a saját adattárad, a saját előzményeiddel. A második példány a munkamásolata, ahol szerkeszt és épít. A harmadik példány a távoli adattár helyi "gyorsítótárazott" példánya. | Itt van Oliver Steele képe arról, hogy mindez hogyan illeszkedik egymáshoz: Ha van elegendő érdeklődés, feltételezhetem, hogy frissíthetem a képet, hogy hozzáadjam a git klónt és a git egyesítést ... | A git fetch egyik felhasználási esete az, hogy az alábbiakban közöljük a távoli ágban bekövetkezett változásokat az utolsó húzás óta ... így ellenőrizheti, mielőtt elvégezne egy tényleges húzást, amely megváltoztathatja az aktuális ág és a munkapéldány fájljait. git letöltés git diff ... eredet Lásd: https://git-scm.com/docs/git-diff a diff parancs dupla- és hármaspontos szintaxisáról | Kicsit költségembe került, hogy megértsem, mi a különbség, de ez egy egyszerű magyarázat. A helyi mester mester fióktelep. Ha klónoz egy adattárat, akkor a teljes tárhelyet lekéri a helyi gazdagépnek. Ez azt jelenti, hogy abban az időben van egy origó / master mutató a HEAD-re és a master ugyanarra a HEAD-re mutat. amikor elkezd dolgozni, és elkötelezi magát, akkor a mester mutatót a HEAD + elkötelezettségek közé kell vinnie. De az origó / mester mutató még mindig arra mutat, hogy mi volt, amikor klónoztál. Tehát a különbség a következő lesz: Ha git-lekérést hajt végre, akkor csak a távoli adattár (GitHub) összes változását fogja lekérni, és az origó / master mutatót a HEAD-be helyezi. Eközben a helyi kirendeltség-mester folyamatosan arra mutat, ahol van. Ha git húzást hajt végre, akkor az alapvetően be fogja tölteni (az előzőekben leírtaknak megfelelően), és egyesíti az új módosításokatelágazás és helyezze a mutatót a HEAD-be. | Néha a vizuális ábrázolás segít. | Röviden A git fetch hasonló a pull-hoz, de nem egyesül. azaz távoli frissítéseket (referenciákat és objektumokat) kap, de a helyi változatlan marad (vagyis az origó / master frissül, de a master változatlan marad). git pull lehúz egy távirányítóról és azonnal összeolvad. Több a git klón repót klónoz. A git rebase ideiglenes területre menti az aktuális fiókjából azokat a dolgokat, amelyek nincsenek az upstream ágban. A fiókteleped most megegyezik a módosítások megkezdése előtt. Tehát a git pull -rebase lehúzza a távoli módosításokat, visszatekercseli a helyi fiókot, egyenként visszajátssza a változtatásokat a jelenlegi fiók tetején, amíg naprakész nem lesz. Ezenkívül a git branch -a pontosan megmutatja, hogy mi történik az összes fiókjával - helyi és távoli. Ez a blogbejegyzés hasznos volt: A különbség a git pull, a git fetch és a git klón (és a git rebase) között - Mike Pearce és kiterjed a git pull, a git fetch, a git klón és a git rebase. ==== FRISSÍTÉS Gondoltam, hogy frissítem ezt, hogy megmutassam, hogyan is használja ezt a gyakorlatban. Frissítse a helyi repót a távvezérlőről (de ne egyesítse): git letöltés A frissítések letöltése után nézzük meg a különbségeket: git diff master eredet / master Ha elégedett ezekkel a frissítésekkel, akkor egyesítse: git húzás Megjegyzések: A 2. lépésről: A helyi és távirányítók közötti különbségekről lásd: Hogyan lehet összehasonlítani a helyi git ágat a távoli ágával? A 3. lépésre: Valószínűleg pontosabb (pl. Gyorsan változó repo esetén) itt git rebase eredetet végrehajtani. Lásd @Justin Ohms megjegyzését egy másik válaszban. Lásd még: http://longair.net/blog/2009/04/16/git-fetch-and-merge/ | git-pull - Letöltés egy másik tárolóból vagy egy helyi fiókból és egyesítés azzal SZINOPSZIS git pull ... LEÍRÁS Futtatja a git-fetch-et a megadott paraméterekkel, és a git-merge hívást egyesíti a beolvasott fej (ek) az aktuális ágba. A --rebase használatával git-rebase-t hív git-merge helyett. Ne feledje, hogy használhatja. (aktuális könyvtár), mint a a helyi adattárból - ez hasznos a helyi fiókok egyesítésénél a jelenlegi ágba. Vegye figyelembe azt is, hogy az opciók önmagában a git-pull és a mögöttes git-merge számára jelentettek a git-fetch-re szánt opciók előtt kell megadni. Meghúzza, ha össze szeretné vonni az előzményeket, és be kellene töltenie, ha csak 'a kódet akarja', mivel néhány ember címkézett néhány cikket errefelé. | Letölthet egy távoli adattárból, megnézheti a különbségeket, majd húzhatja vagy egyesítheti. Ez egy példa az eredet nevű távoli adattárra és a master nevű ágra, amely a távoli ág eredetét / masterét követi: git checkout master git letöltés git diff eredet / master git rebase eredet mester | A rövid és egyszerű válasz az, hogy a git pull egyszerűen git fetch, majd git merge. Nagyon fontos megjegyezni, hogy a git pull automatikusan egyesül, akár tetszik, akár nem. Ez természetesen összeolvadási konfliktusokat eredményezhet. Tegyük fel, hogy a távvezérlője eredetű, az ága pedig mester. Ha megkapja a diff eredetet / mestert a húzás előtt, akkor legyen némi elképzelése a lehetséges egyesülési konfliktusokról, és ennek megfelelően felkészítheti a helyi fiókot. A húzáson és a lökésen kívül néhány munkafolyamat magában foglalja a git újrabázist is, például ezt, amelyet a linkelt cikkben átfogalmazok: git pull eredet mester git pénztár foo-ág git rebase master git push eredetű foo-ág Ha ilyen helyzetbe kerül, akkor kísértésbe eshet, hogy felhúzza a --rebase-t. Hacsak nem igazán, tényleg tudja, mit csinál, én ezt javasolnám. Ez a figyelmeztetés a git-pull kézikönyv oldaláról származik, a 2.3.5-ös verzióhoz: Ez potenciálisan veszélyes működési mód. Átírja történelem, ami nem ígér semmit, amikor közzétette ezt a történelmet már. Csak akkor használja ezt az opciót, ha elolvasta a git-rebase (1) gondosan. | OK, itt van néhány információ a git pullról és a git fetch-ről, így megértheti a tényleges különbségeket ... néhány egyszerű szóval a fetch megkapja a legfrissebb adatokat, de a kód nem változik, és nem fog elrontani a jelenlegi helyi fiókkóddal , de húzza be a kódváltozásokat és egyesítse a helyi fiókot, olvassa el, hogy további részleteket kapjon mindegyikről: git letöltés Letölti az összes hivatkozást és objektumot, valamint minden új ágat a helyi adattárba ... Húzza le az ágakat és / vagy a címkéket (együttesen: "ref") egy vagy több más adattárak, a kitöltésükhöz szükséges tárgyakkal együtt történetek. A távkövetési ágak frissülnek (lásd a leírást a viselkedés ellenőrzésének módjairól). Alapértelmezés szerint minden olyan címke, amely a beolvasott előzményekbe mutat elhozták is; a hatás az, hogy olyan címkéket töltsön le, amelyek azokra az ágakra mutatnak érdekli. Ez az alapértelmezett viselkedés a a --tags vagy --no-tag opciókat, vagy konfigurálással távoli..tagOpt. A címkéket kifejezetten lekérő refspec használatával be tudja tölteni azokat a címkéket, amelyek nem az Ön érdekelt ágaiba mutatnak be is. a git fetch lehívhatvagy egyetlen megnevezett tárház vagy URL, vagy több tárból egyszerre, ha megadják, és van egy távirányítók. bejegyzés a konfigurációs fájlba. (Lásd: git-config1). Ha nincs megadva távvezérlő, alapértelmezés szerint a távoli távoli lesz használt, kivéve, ha egy upstream ág van konfigurálva az áramra ág. A beolvasott hivatkozások neve és az objektum neve mutatnak, a .git / FETCH_HEAD címre vannak írva. Ez az információ lehet szkriptek vagy más git parancsok, például git-pull. git húzás A távoli és az aktuális fiók közötti változásokat a helyi ... Beépíti a távoli adattárból az aktuális ágba történő változásokat. Alapértelmezett módjában a git pull rövidítés a git lekéréshez, amelyet követ git egyesítés FETCH_HEAD. Pontosabban, a git pull futtatja a git letöltést a megadott paraméterekkel és A hívások git merge a beolvasott ágfejek áramba egyesítéséhez ág. A --rebase használatával a git újraindítást futtatja a git egyesítés helyett. a távoli adattár neve legyen git-fetch1. megnevezhet egy tetszőleges távoli hivatkozást (például a címke neve) vagy akár a megfelelő hivatkozások gyűjteménye távkövető ágak (pl. refs / heads /: refs / remotes / origin /), de általában a távoli adattárban található fiók neve. A és alapértelmezett értékei a következőre olvashatók le: A "távoli" és az "egyesítés" konfiguráció az aktuális ághoz, a git-branch - track. Az alábbi látványt is létrehozom, hogy megmutassam, hogyan működik együtt a git fetch és a git pull ... | Ez az interaktív grafikus ábrázolás nagyon hasznos a git megértésében: http://ndpsoftware.com/git-cheatsheet.html A git fetch csak "letölti" a változásokat a távirányítóról a helyi adattárba. A git pull letölti a változásokat és beolvasztja őket az aktuális fiókjába. "Alapértelmezett módjában a git pull rövidítés a git lekéréshez, majd a git egyesítés FETCH_HEAD." | Bónusz: A pull & fetch szóval a fenti válaszokban egy érdekes trükköt szeretnék megosztani, git pull --rebase Ez a fenti parancs a leghasznosabb parancs az életemben, amely sok időt takarított meg. Mielőtt az új elkötelezettségeket kiszolgálóra tolná, próbálkozzon ezzel a paranccsal, és ez automatikusan szinkronizálja a legújabb szerver-változásokat (egy lekérés + egyesítéssel), és az elkötelezettséget a git napló tetején fogja elhelyezni. Nem kell aggódnia a kézi húzás / egyesítés miatt. További részletek: http://gitolite.com/git-pull--rebase | Szeretem, ha vizuálisan ábrázolom a helyzetet, hogy megértsem ezeket a dolgokat. Lehet, hogy más fejlesztők is szeretnék látni, ezért íme a kiegészítésem. Nem vagyok teljesen biztos abban, hogy mindez helyes, ezért kérjük, tegyen megjegyzést, ha hibát talál. HELYI RENDSZER . ==================================================== === =================. ================= =================== ============= TÁVIRÁNYÍTÓ TÁROLÓ. TÁVOLI TÁROLÓ HELYI TÁROLÓ MUNKAMUNKÁJA (EREDET) . (Gyorsítótárazott) például, . tükör a egy github repo. . távoli repo Is lehet . több repo. . . FETCH * ------------------> * A távoli távoli gyorsítótár frissül az eredetével (vagy többszörösével) külső források, vagyis a git elosztott jellege) . HÚZZ * ------------------------------------------------ --------> * a módosításokat közvetlenül a helyi példányba olvasztják. amikor konfliktusok lépnek fel, döntéseket kérnek tőled. . ELKÖVETNI . * <--------------- * Amikor például felforgatásból származik, azt gondolhatja, hogy elkötelezett frissíteni fogja az eredetet. A git-ben csak a helyi repo-val történik elkötelezettség. . PUSH * <--------------------------------------- * Szinkronizálja a változtatásokat az eredethez. A távvezérlő lehúzott tükrének néhány fő előnye: Teljesítmény (görgessen végig minden elkötelezettséget és üzenetet anélkül, hogy megpróbálná átpréselni a hálózaton) Visszajelzés a helyi repo állapotáról (például az Atlassian's SourceTree-t használom, amely izzóval jelzi, hogy az eredethez képest előre vagy mögött vagyok-e. Ezeket az információkat egy GIT FETCH-mal lehet frissíteni). | Ezzel is küzdöttem. Valójában pontosan ugyanarról a kérdésről kerestem a Google keresését. Mindezen válaszok elolvasása végül képet festett a fejemben, és úgy döntöttem, hogy megpróbálom ezt lecsökkenteni, szemügyre véve a 2 tár és 1 homokozó állapotát és az idővel végrehajtott műveleteket, miközben nézem a verziójukat. Tehát itt álltam elő. Kérem, javítson ki, ha bárhol elrontottam. A három repo egy lekéréssel: --------------------- ----------------------- ------ ----------------- - Távoli repo - - Távoli repo - - Távoli repo - - - - tolódik - - - - @ R01 - - @ R02 - - @ R02 - --------------------- ----------------------- ------ ----------------- --------------------- ---------------------------------------------- - Helyi repo - - Helyi repo - - Helyi repo - - húzás - - - - lekérés - - @ R01 - - @ R01 - - @ R02 - --------------------- ----------------------- ------ ----------------- --------------------- ----------------------- ------ ----------------- - Helyi homokozó - - Helyi homokozó - - Helyi homokozó - - Pénztár - - új munka elvégezve - - - - @ R01 - - @ R01 + - - @ R01 + - --------------------- ----------------------- ------ ----------------- A három repó húzással --------------------- ----------------------- ------ ----------------- - Távoli repo - - Távoli repo - - Távoli repo - - - - tolódik - - - - @ R01 - - @ R02 - - @ R02 - --------------------- ----------------------- ------ ----------------- --------------------- ----------------------- ------ ----------------- - Helyi repo - - Helyi repo - - Helyi repo - - húzás - - - - húzás - - @ R01 - - @ R01 - - @ R02 - --------------------- ----------------------- ------ ----------------- --------------------- ----------------------- ------ ----------------- - Helyi homokozó - - Helyi homokozó - - Helyi homokozó - - Pénztár - - új munka elvégezve - - egyesítve az R02-vel - - @ R01 - - @ R01 + - - @ R02 + - --------------------- ----------------------- ------ ----------------- Ez segített megérteni, hogy miért nagyon fontos a lekérés. | A GIT Fetch és a GIT Pull közötti különbség a következő forgatókönyvvel magyarázható: (Szem előtt tartva, hogy a képek hangosabban beszélnek, mint a szavak!, Képi ábrázolást adtam) Vegyünk egy példát arra, hogy egy projekten dolgozik a csapat tagjaival. Tehát a projektnek lesz egy fő ága, és az összes közreműködőnek el kell építenie a saját helyi adattárába, majd ezen a helyi ágon kell dolgoznia a modulok módosításán / hozzáadásán, majd a fő ághoz való visszalépéshez. Így, A két fiók kezdeti állapota, amikor a fő projektet a helyi adattárban elágazta, ilyen lesz ((A, B és C a projekt már befejezett modulok) Most elkezdtél dolgozni az új modulon (tegyük fel, hogy D), és amikor befejezted a D modult, a fő ágra akarod tolni, de közben az történik, hogy egyik csapattársad kifejlesztett új E, F és módosított C. Tehát most az történt, hogy a helyi adattár nem marad el a projekt eredeti előrehaladása mögött, és így a változtatások fő ágra való tolása konfliktusokhoz vezethet, és a D modul hibás működéséhez vezethet. Az ilyen jellegű problémák elkerülése és a projekt eredeti előrehaladásával párhuzamosan történő munkavégzés kétféle módon lehetséges: 1. Git Fetch - Ez letölti az eredet / fő ág projektben végrehajtott összes olyan módosítást, amely nincs jelen a helyi fiókban. És megvárja, amíg a Git Merge parancs alkalmazza a lerakatra vagy az ágra behozott módosításokat. Tehát most gondosan figyelemmel kísérheti a fájlokat, mielőtt egyesítené azokat a tárával. És módosíthatja a D-t is, ha szükséges a módosított C miatt. 2. Git Pull - Ez frissíti a helyi fiókot az origóval / fő ággal, vagyis valójában amit csinál, az a Git Fetch és a Git kombinációja egymás után. De ez konfliktusokat okozhat, ezért ajánlott a Git Pull használatát tiszta másolattal. | Egyszerűen azt mondjuk: git pull == git fetch + git egyesítés Ha futtatja a git pull alkalmazást, akkor nem kell egyesítenie az adatokat a helyi fájlba. Ha futtatja a git fetch-et, az azt jelenti, hogy futtatnia kell a git merge-t, hogy a legfrissebb kódot elérje a helyi gépen. Ellenkező esetben a helyi gép kódja nem változik összeolvadás nélkül. Tehát a Git Guiban, amikor lekér, össze kell egyesítenie az adatokat. Maga a Fetch nem változtatja meg a kódot a helyi nyelven. Ezt a kód frissítésével ellenőrizheti lekéréssel ha egyszer elhozza és meglátja; a kód nem fog változni. Aztán egyesül ... Meglátja a megváltozott kódot. | A git fetch lehúzza a kódot a távoli szerverről a helyi adattár nyomkövetési ágaihoz. Ha a távvezérlő neve origó (alapértelmezett), akkor ezek az ágak az eredeten belül lesznek (például origin / master, origin / mybranch-123 stb.). Ezek nem az Ön jelenlegi ágai, hanem a szerverről érkező ágak helyi másolatai. . A git pull elvégzi a git lekérését, de azután a nyomkövetési ág kódját is egyesíti az aktuálisbaaz ág helyi változata. Ha még nem áll készen a változásokra, először csak a git letöltést kell elvégeznie. | A git fetch lekéri a távoli ágakat, így Ön git diff vagy git egyesítheti őket az aktuális ággal. A git pull futtatni fogja az aktuális ág által követett távoli brach-ot, majd egyesíti az eredményt. A git fetch segítségével megnézheti, hogy vannak-e frissítések a távoli ágon, anélkül, hogy azokat össze kellene egyesíteni a helyi fiókkal. | Git Fetch A helyi fiókváltozásokat letölti a származástól a letöltésig. A Fetch a távoli repótól megkéri az összes olyan elkötelezettséget, amelyet mások elkövettek, de Ön nem rendelkezik a helyi repóval. A Fetch letölti ezeket a parancsokat, és felveszi a helyi adattárba. Git Merge Az egyesítés paranccsal alkalmazhatja a letöltés útján letöltött módosításokat. Az egyesítés felveszi a lekérésből visszavett feladatokat, és megpróbálja hozzáadni a helyi fiókhoz. Az egyesítés megőrzi a helyi változások végrehajtási előzményeit, így amikor az ágat lökéssel osztja meg, Git tudja, hogy mások hogyan egyesíthetik a változtatásokat. Git Pull A Fetch és az Merge elég gyakran fut együtt, így létrejött egy parancs, amely egyesíti a kettőt, pull. A Pull végrehajt egy lekérést, majd egy egyesítést, hogy a letöltött parancsokat hozzáadja a helyi fiókhoz. | Egyszerűbben fogalmazva: ha bármilyen internetkapcsolat nélkül fel akart ugrani egy repülőgépre ... indulás előtt csak megtehette a git fetch eredetét . Az összes változtatást beolvassa a számítógépére, de elkülöníti a helyi fejlesztési / munkaterülettől. A repülőgépen változtathat a helyi munkaterületen, majd egyesítheti a beolvasottal, és megoldhatja az esetleges egyesítési konfliktusokat, az internethez való csatlakozás nélkül. És hacsak valaki nem hajtott végre új változtatásokat a távoli adattárban, akkor amikor megérkezik a rendeltetési helyre, megkapja a push origin lehetőséget, és elmegy a kávéért. Ebből a fantasztikus atlassai bemutatóból: A git fetch parancs letölti a kötelezettségeket, fájlokat és hivatkozásokat a távoli adattárat a helyi adattárba. A lekérés az, amit akkor csinálsz, amikor meg akarod nézni, mi mindenki másé dolgozott. Ez abban hasonlít az SVN frissítéséhez, hogy láthatja hogyan haladt a központi történelem, de nem kényszeríti egyesítse a változásokat a tárában. Git izolátumok a meglévő helyi tartalomból lekérte a tartalmat, abszolút rendelkezik nincs hatása a helyi fejlesztési munkájára. A letöltött tartalmat kifejezetten ellenőrizni kell a git checkout paranccsal. Ez teszi előkészíti a kötelezettségvállalások felülvizsgálatának biztonságos módját, mielőtt integrálja őket a helyi adattár. Ha tartalmat tölt le egy távoli adattárból, a feladat végrehajtásához git pull és git fetch parancsok állnak rendelkezésre. Megfontolhatja git beolvasni a két parancs 'biztonságos' verzióját. Letölti a távoli tartalmat, de nem frissíti a helyi adattár működési állapotát, aktuális munkáját érintetlenül hagyva. git pull az agresszívabb alternatív megoldásként letölti a távoli tartalmat az aktív helyi számára ág, és azonnal hajtsa végre a git merge-t, hogy létrejöjjön az egyesítés az új távoli tartalomhoz. Ha függőben lévő változások vannak folyamatban ez konfliktusokat okoz és elindítja az összeolvadási konfliktusmegoldást folyam. Git húzással: Nem kapsz elszigeteltséget. Nem kell kifejezetten ellenőrizni. Mert hallgatólagosan összeolvad a git. Az összevonási lépés hatással lesz a helyi fejlődésre, és konfliktusokat okozhat Alapvetően NEM biztonságos. Agresszív. Ellentétben a git letöltéssel, ahol csak a .git / refs / távirányítóit érinti, a git pull hatással lesz mind a .git / refs / távirányítóira, mind a .git / refs / fejeire / Hmmm ... szóval ha nem frissítem a munkamásolatot git fetch-el, akkor hol változtatok? Hol tárolja a Git fetch az új elkötelezettségeket? Remek kérdés. Valahol elkülöníti a munkapéldányától. De megint hol? Találjuk ki. A projektkönyvtárban (azaz ahol elvégzi a git parancsokat): ls. Ez megmutatja a fájlokat és könyvtárakat. Semmi klassz, tudom. Most tedd ls -a. Ez megmutatja a pontfájlokat, azaz a kezdőbetűket. Ezután láthatja a .git nevű könyvtárat. Ne cd .git. Ez nyilvánvalóan megváltoztatja a könyvtárat. Most jön a szórakoztató rész; tedd. Megjelenik a könyvtárak listája. Ref-ket keresünk. Csináljon cd-hivatkozásokat. Érdekes látni, mi található az összes könyvtárban, de koncentráljunk kettőre. fejek és távirányítók. Használja a cd-t, hogy ellenőrizze őket is. Bármely git lekérés frissíti a /.git/refs/remotes könyvtárban található elemeket. Nem frissít semmit a /.git/refs/heads könyvtárban. Bármely git húzás először elvégzi a git lekérését, frissíti az elemeket a /.git/refs/remotes könyvtárban, majd összeolvad a helyi, majd megváltoztatja a fejét a /.git/refs/heads könyvtárban. Nagyon jó kapcsolódó válasz megtalálható a Hol helyezi el magát a „git fetch”? Ezenkívül keresse meg a "Slash jelölést" a Git ág elnevezési konvencióinak posztján. Segít jobban megérteni, hogy a Git hogyan helyezi el a dolgokatkülönböző könyvtárakat. A tényleges különbség megtekintéséhez Csak csináld: git fetch eredetmester git checkout master Ha a távoli master frissítve lett, akkor egy ilyen üzenetet kap: A fiókteleped 2 elkötelezettséggel az „origin / master” mögött van, és gyorsan tovább lehet továbbítani. (a "git pull" használatával frissítse a helyi fiókot) Ha nem letöltötte, és csak git checkout masteret hajtott végre, akkor a helyi git nem tudná, hogy 2 elkötelezettség van hozzáadva. És csak annyit mondana: Már a „master” oldalon van Fiókod naprakész az 'origin / master' névvel. De ez elavult és helytelen. Ez azért van, mert a git kizárólag annak alapján ad visszajelzést, amit tud. Feledetlen az új kötelezettségvállalásokról, amelyeket még nem húzott le ... Van-e valamilyen módja annak, hogy megnézzük a távoli új módosításokat, miközben a fiókban helyben dolgozunk? Egyes IDE-k (pl. Xcode) nagyon okosak, és egy git-lekérés eredményét használják, és feljegyezhetik azokat a kódsorokat, amelyeket a jelenlegi munkaág távoli ágában megváltoztattak. Ha ezt a sort mind a helyi változtatások, mind a távoli elágazás megváltoztatta, akkor ez a vonal pirossal lesz jelölve. Ez nem összeolvadási konfliktus. Ez egy lehetséges összeolvadási konfliktus. Ez egy headsup, amellyel megoldhatja a jövőbeni egyesítési konfliktust, mielőtt a távoli ágról git húzást végezne. Szórakoztató tipp: Ha elhozott egy távoli ágat pl. tette: git fetch origó funkció / 123 Akkor ez a távirányító könyvtárába kerül. Még mindig nem érhető el a helyi könyvtárban. Azonban leegyszerűsíti a fizetését a DWIM távoli fiókjába (tegye, amire gondolok): git checkout funkció / 123 már nem kell ezt tennie: git checkout -b feature / 123 origin / feature / 123 További információ erről itt olvasható | Az egyetlen különbség a git pull és a git fetch között az, hogy: git pull húz egy távoli ágról, és összeolvasztja. A git fetch csak a távoli ágról tölti le, de nem egyesül azaz git pull = git fetch + git egyesítés ... | A Git lehetővé teszi az időrendi szempontból régebbi elkötelezettségek alkalmazását az újabb elkötelezettségek után. Emiatt az elkötelezettségek átadása a tárak között két lépésre oszlik: Az új kötelezettségvállalások másolása a távoli fiókról a távoli ág másolatára a helyi repóban. (repo a repo művelethez) master @ remote >> remote / origin / master @ local Új kötelezettségvállalások integrálása a helyi fiókba (belső repo művelet) távoli / origó / master @ helyi >> master @ helyi Kétféle módon lehet végrehajtani a 2. lépést. Fork helyi ág az utolsó közös ős után, és adjon hozzá új végrehajtásokat párhuzamosan a helyi adattárban egyedülállóakkal, amelyek a véglegesítéssel egyesülnek az elkötelezettséggel, bezárva a villát. Helyezzen be új elkötelezettségeket az utolsó közös ős után, és alkalmazza újra a helyi adattár egyedi tulajdonságait. A git terminológiában az 1. lépés a git lekérés, a 2. lépés a git egyesítés vagy a git újbázis git pull a git fetch és a git egyesül | A Git két parancs segítségével szerzi be a legújabb verzió ágát a távvezérlőtől a lokálisig: git fetch: A Git megkapja a legújabb verziót a távoli és a helyi között, de nem egyesül automatikusan. git fetch eredetmester git log -p mester..eredet / mester git merge origin / master A fenti parancsok azt jelentik, hogy a főág legfrissebb verzióját töltsék le az eredetről a távoli és az eredeti főág között. Ezután összehasonlítja a helyi törzságat és a származási törzságat. Végül egyesítsd. git pull: A Git a távirányítóról fogja letölteni a legújabb verziót, és beolvad a lokálisba. git pull eredet mester A fenti parancs megegyezik a git lekéréssel és a git egyesítésével. A gyakorlatban a git lehívása talán biztonságosabb, mert az egyesítés előtt láthatjuk a változásokat, és eldönthetjük, hogy egyesítjük-e. | Mi a különbség a git pull és a git fetch között? Ennek megértéséhez először meg kell értenie, hogy a helyi git nemcsak a helyi adattárat, hanem a távoli adattár helyi másolatát is fenntartja. A git fetch naprakészvé teszi a távoli adattár helyi másolatát. Például, ha a távoli adattár GitHub - érdemes lehet a távoli adattárban végrehajtott módosításokat beolvasni a távoli adattár helyi példányába. Ez lehetővé teszi olyan műveletek végrehajtását, mint az összehasonlítás vagy az egyesítés. A git pull viszont a távoli adattár változásait hozza le, ahol a saját kódját őrzi. Általában a git pull először git-lekérést hajt végre, hogy a távoli adattár helyi másolatát naprakész állapotba hozza, majd egyesíti a változtatásokat a saját kódtárába és esetleg a munkamásolatába. | git pull == (git lekérés + git egyesítés) A git fetch nem változik a helyi fiókokban. Ha már rendelkezik egy helyi adattárral, amelynek távvezérlője be van állítva a kívánt projekthez, a git fetch segítségével megragadhatja az összes ágat és címkét a meglévő távvezérlőhöz. ... A Fetch nem változtat a helyi fiókokban, ezért az újonnan behozott változtatások beépítéséhez össze kell egyesítenie egy távoli ágat egy párosított helyi fiókkal. a githubból | Egyszerű grafikus ábrázolás kezdőknek, itt, git húzás lekéri a kódotaz adattárból, és újrabázolja a helyi ... a git pull-ban lehetőség van új elkötelezettségek létrehozására. de , git letöltés be fogja tölteni a kódot a tárból, és manuálisan újra kell futtatnunk a git rebase használatával pl: lekérem a szerver mesterről és újraindítom a helyi mesteremben. 1) git pull (az újraindítás automatikusan megtörténik): git pull eredet mester itt az eredet a távoli repo mester az ág 2) git lekérés (manuálisan kell újraindítani): git fetch eredetmester lekéri a szerver változásait az eredetükről. és addig lesz a helyi, amíg önállóan nem alapozza meg újra. manuálisan kell megoldanunk az ütközéseket a kódok ellenőrzésével. git rebase eredet / master ez újrabázolja a kódot lokálissá. előtte győződjön meg róla, hogy a megfelelő ágban van. | Megpróbál világos és egyszerű lenni. A git pull parancs tulajdonképpen egy parancsikon a git lekéréshez, amelyet a konfigurációtól függően követ a git merge vagy a git rebase parancs. Konfigurálhatja a Git adattárat úgy, hogy a git pull egy lekérés, majd egy újraindítás legyen. | Valójában Git fenntartja a saját kódjának és a távoli adattár. A git fetch parancs frissíti a helyi másolatot azáltal, hogy adatokat kap a távoli adattárból. Erre azért van szükségünk, mert lehet, hogy valaki más módosított néhányat a kódon, és Ön szeretné naprakészen tartani magát. A git pull parancs a távoli adattár változásait hozza oda, ahol a saját kódját megőrzi. Normális esetben a git pull ezt úgy hajtja végre, hogy először egy „git fetch” -et hajt végre, hogy a távoli adattár helyi másolatát naprakész állapotba hozza, majd egyesíti a változtatásokat a saját kódtárába és esetleg a munkamásolatába. | 1 2 Következő Nagyon aktív kérdés. Nyerjen 10 hírnevet a kérdés megválaszolásához. A jó hírnév követelménye megvédi ezt a kérdést a spamektől és a nem válaszolóktól. Nem a keresett válasz? Böngésszen a git version-control git-pull git-fetch címkével ellátott többi kérdésben, vagy tegye fel saját kérdését.